type contrains